﻿const Octokit = require('@octokit/core')

const octokit = new Octokit.Octokit({
  auth: process.env.GITHUB_TOKEN || process.env.GITHUB_AUTH
})

const queryIssue = ({ title, id }) => {
  return octokit
    .request('GET /search/issues', {
      q: title,
      per_page: 5
    })
    .then(({ data }) => {
      const list = data.items
        .map((item) => {
          return {
            title: item.title,
            url: item.html_url,
            id: item.id
          }
        })
        .filter((item) => {
          return item.id !== id
        })

      if (list.length > 0) {
        return `
> Issue Robot generation

### 以下的issue可能会帮助到你 ：

${list
  .map((item) => {
    return `* [${item.title}](${item.url})`
  })
  .join('\n')}`
      }
      return null
    })
    .then(async (markdown) => {
      return markdown
    })
}

const findIssue = async (issueId) => {
  const { data } = await octokit.request('GET /repos/{owner}/{repo}/issues/{issue_number}', {
    owner: 'react-admin',
    repo: 'pro-components',
    issue_number: issueId
  })
  return data
}
const closeIssue = async (issueId) => {
  await octokit.request('PATCH /repos/{owner}/{repo}/issues/{issue_number}', {
    owner: 'react-admin',
    repo: 'pro-components',
    issue_number: issueId,
    state: 'closed'
  })
}
const replyCommit = async (issueId, markdown) => {
  await octokit.request('POST /repos/{owner}/{repo}/issues/{issue_number}/comments', {
    owner: 'react-admin',
    repo: 'pro-components',
    issue_number: issueId,
    body: markdown
  })
}

const reply = async () => {
  const issueId = process.env.ISSUE_NUMBER
  const issue = await findIssue(issueId)
  if (!issue.title || issue.title.length < 12) {
    replyCommit(issueId, '**请写一个可读的标题！**')
    closeIssue(issueId)
    return
  }
  // const markdown = await queryIssue({
  //   title: issue.title,
  //   id: issue.id,
  // });
  // replyCommit(issueId, markdown);
}

reply()
